﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ASPPanificadora.classes;
using ASPPanificadora.fabrica;
using NHibernate;
using NHibernate.Linq;

namespace ASPPanificadora.controller
{
    public class AbrirFecharCaixaController : IAbrirFecharCaixaController
    {
        Fabrica fabrica = new Fabrica();

        public string Salvar(AbrirFecharCaixa abrirFecharCaixa)
        {
            return fabrica.Salva(abrirFecharCaixa);
        }

        public AbrirFecharCaixa RetornaCaixaAberto()
        {
            ISession sessao = fabrica.sessao();
            AbrirFecharCaixa caixaAberto = sessao.Query<AbrirFecharCaixa>().Where(a => a.Finalizado == false).FirstOrDefault();
            if (caixaAberto != null)
            {
                caixaAberto.QtdeCompras = sessao.Query<Compra>().Where(a => a.FechamentoCompra == false).Count();
                if (caixaAberto.QtdeCompras > 0)
                    caixaAberto.ValorTotalCompras = sessao.Query<Compra>().Where(a => a.FechamentoCompra == false).Select(a => a.ValorTotalCompra).ToList().Sum();
                else
                    caixaAberto.ValorTotalCompras = 0;

                caixaAberto.QtdeVendas = sessao.Query<Venda>().Where(a => a.FechamentoVenda == false).Count();
                if (caixaAberto.QtdeVendas > 0)
                    caixaAberto.ValorTotalVendas = sessao.Query<Venda>().Where(a => a.FechamentoVenda == false).Select(a => a.ValorTotalVenda).ToList().Sum();
                else
                    caixaAberto.ValorTotalVendas = 0;

                caixaAberto.DinheiroCaixaFechamento = caixaAberto.DinheiroCaixaAbertura + caixaAberto.ValorTotalVendas - caixaAberto.ValorTotalCompras;
            }
            fabrica.fechaSessao();
            return caixaAberto;
        }


        public AbrirFecharCaixa RetornaCaixaAnterior()
        {
            ISession sessao = fabrica.sessao();
            AbrirFecharCaixa caixaAberto = sessao.Query<AbrirFecharCaixa>().Where(a => a.Finalizado == true).OrderByDescending(a => a.Id).FirstOrDefault();
            fabrica.fechaSessao();
            return caixaAberto;
        }


        public string FechaComprasVendas()
        {
            return fabrica.FechaComprasVendas();
        }
        
        public bool VerificaCaixaAberto()
        {
            ISession sessao = fabrica.sessao();
            int caixaAberto = sessao.Query<AbrirFecharCaixa>().Where(a => a.Finalizado == false).Count();
            fabrica.fechaSessao();
            if (caixaAberto > 0)
                return true;
            else
                return false;
        }
    }
}